#include "CatedraMateria.h"

using namespace modelo;

CatedraMateria::CatedraMateria(string otraDescripcion)
{
	this->descripcion = otraDescripcion;
	this->habilitada = true;
};


bool CatedraMateria::SeSolapaCon(CatedraMateria* otraCatedra)
{
	list<DiaCursadaMateria*> diasOtraCatedra = otraCatedra->GetDiasCursada();
	list<DiaCursadaMateria*>::iterator itDiasOtraCatedra;
	for(itDiasOtraCatedra = diasOtraCatedra.begin(); itDiasOtraCatedra != diasOtraCatedra.end(); itDiasOtraCatedra++)
	{
		DiaCursadaMateria* diaOtraCatedra = *itDiasOtraCatedra;
		list<DiaCursadaMateria*>::iterator itDiasPropios;
		for(itDiasPropios = this->diasCursada.begin(); itDiasPropios != this->diasCursada.end(); itDiasPropios++)
		{
			DiaCursadaMateria* diaPropio = *itDiasPropios;
			if(diaPropio->SeSolapaCon(diaOtraCatedra))
			{
				return true;
			}
		}
	}
	return false;
};


bool CatedraMateria::SeCursaDentroDe(list<DisponibilidadHorariaDiaria*> disponibilidadHoraria)
{
	list<DiaCursadaMateria*>::iterator itDiaCursada;
	for(itDiaCursada = this->diasCursada.begin(); itDiaCursada != this->diasCursada.end(); itDiaCursada++)
	{
		bool diaDentroDeRango = false;
		DiaCursadaMateria* diaCursada = *itDiaCursada;
		list<DisponibilidadHorariaDiaria*>::iterator itDispHoraria;
		for(itDispHoraria = disponibilidadHoraria.begin(); itDispHoraria !=disponibilidadHoraria.end(); itDispHoraria++)
		{
			DisponibilidadHorariaDiaria* unaDispHoraria = *itDispHoraria;
			if(unaDispHoraria->Contiene(diaCursada)) 
			{
				diaDentroDeRango = true;
				break;
			}
		}
		if(!diaDentroDeRango) 
			return false;
	}
	return true;
};

void CatedraMateria::Deshabilitar()
{
	this->habilitada = false;
};